package com.immortal.core.utils;

import com.immortal.core.module.res.ApiException;
import com.immortal.core.utils.lang.NumberValidationUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;

public class MapUtil {
    public  static  Integer getInteger(Map<String,Object> map,String key){
        if(map.isEmpty()){
            return 0;
        }
        Object o=map.getOrDefault(key,0);
        if(StringUtils.isBlank(o.toString())){
            o=0;
        }
        if(NumberValidationUtils.isWholeNumber(o.toString())){
            return Integer.valueOf(o.toString());
        }else {
             throw  new ApiException("格式非法");
        }
    }
    public  static  Integer getInteger(Map<String,Object> map,String key,Integer defaultInteger){
        if(map.isEmpty()){
            return 0;
        }
        Object o=map.getOrDefault(key,defaultInteger);
        if(StringUtils.isBlank(o.toString())){
            o=defaultInteger;
        }
        if(NumberValidationUtils.isWholeNumber(o.toString())){
            return Integer.valueOf(o.toString());
        }else {
            throw  new ApiException("格式非法");
        }
    }
    public  static  Long getLong(Map<String,Object> map,String key){
        if(map.isEmpty()){
            return 0L;
        }
        Object o=map.getOrDefault(key,0);
        if(StringUtils.isBlank(o.toString())){
            o=0;
        }
        if(NumberValidationUtils.isWholeNumber(o.toString())){
            return Long.valueOf(o.toString());
        }else {
            throw  new ApiException("格式非法");
        }
    }
    public  static  Long getLong(Map<String,Object> map,String key,Long defaultLong){
        if(map.isEmpty()){
            return 0L;
        }
        Object o=map.getOrDefault(key,defaultLong);
        if(StringUtils.isBlank(o.toString())){
            o=defaultLong;
        }
        if(NumberValidationUtils.isWholeNumber(o.toString())){
            return Long.valueOf(o.toString());
        }else {
            throw  new ApiException("格式非法");
        }
    }
    public  static Double getDouble(Map<String,Object> map,String key){
        if(map.isEmpty()){
            return 0D;
        }
        Object o=map.getOrDefault(key,0.0);
        if(StringUtils.isBlank(o.toString())){
            o=0.0;
        }
        if(NumberValidationUtils.isDecimal(o.toString())){
            return Double.valueOf(o.toString());
        }else {
            throw  new ApiException("格式非法");
        }
    }
    public  static Double getDouble(Map<String,Object> map,String key,Double defaultDouble){
        if(map.isEmpty()){
            return 0D;
        }
        Object o=map.getOrDefault(key,defaultDouble);
        if(StringUtils.isBlank(o.toString())){
            o=defaultDouble;
        }

        if(NumberValidationUtils.isDecimal(o.toString())){
            return Double.valueOf(o.toString());
        }else {
            throw  new ApiException("格式非法");
        }
    }
    public  static  Boolean getBoolean(Map<String,Object> map,String key){
        if(map.isEmpty()){
            return false;
        }
        Object o=map.getOrDefault(key,"false");
        if(StringUtils.isBlank(o.toString())){
            o=false;
        }
        if(StringUtils.equalsAny(o.toString(),"false","true","0","1")){
            if(StringUtils.equalsAny(o.toString(),"false","true")){
                return Boolean.valueOf(o.toString());
            }else {
                if(StringUtils.equals(o.toString(),"0")){
                    return false;
                }else {
                    return true;
                }
            }
        }else {
            throw  new ApiException("格式非法");
        }
    }
    public  static  Boolean getBoolean(Map<String,Object> map,String key,Boolean defaultBoolean){
        if(map.isEmpty()){
            return false;
        }
        Object o=map.getOrDefault(key,defaultBoolean);
        if(StringUtils.isBlank(o.toString())){
            o=defaultBoolean;
        }
        if(StringUtils.equalsAny(o.toString(),"false","true","0","1")){
            if(StringUtils.equalsAny(o.toString(),"false","true")){
                return Boolean.valueOf(o.toString());
            }else {
                if(StringUtils.equals(o.toString(),"0")){
                    return false;
                }else {
                    return true;
                }
            }
        }else {
            throw  new ApiException("格式非法");
        }
    }
    public static String getString(Map<String,Object> map,String key){
        if(map.isEmpty()){
            return "";
        }
        Object o=map.getOrDefault(key,"");
        if(o==null){
            return "";
        }
        return o.toString();
    }
    public static String getString(Map<String,Object> map,String key,String defaultStr){
        if(map.isEmpty()){
            return "";
        }
        Object o=map.getOrDefault(key,defaultStr);
        if(o==null)
            return "";
        return o.toString();
    }
}
